﻿using ExcellentProjectPlus.Dominio.Calificaciones.Entidades;
using ExcellentProjectPlus.Dominio.Calificaciones.Servicios.CalificacionEstudianteCursos;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Transactions;

namespace ExcellentProjectPlus.Aplicacion.Calificaciones.CalificacionEstudianteCursos
{
    public class ServicioDeGestionDeCalificacionEstudianteCursos : IServicioDeGestionDeCalificacionEstudianteCursos
    {
        #region Propiedades
        IServicioDeAdministracionDeCalificacionEstudianteCursos _servicioDeAdministracionDeCalificacionEstudianteCursos;
        #endregion

        #region Constructores
        public ServicioDeGestionDeCalificacionEstudianteCursos(IServicioDeAdministracionDeCalificacionEstudianteCursos servicioDeAdministracionDeCalificacionEstudianteCursos)
        {
            _servicioDeAdministracionDeCalificacionEstudianteCursos = servicioDeAdministracionDeCalificacionEstudianteCursos;
        }
        #endregion
        public IEnumerable<CalificacionEstudianteCurso> ObtenerCalificacionEstudianteCursos()
        {
            IEnumerable<CalificacionEstudianteCurso> resultado = null;
            var trxOptions = new TransactionOptions();
            trxOptions.IsolationLevel = IsolationLevel.ReadUncommitted;
            trxOptions.Timeout = TimeSpan.FromMinutes(2);
            using (var transaccion = new TransactionScope(TransactionScopeOption.RequiresNew, trxOptions))
            {
                resultado = _servicioDeAdministracionDeCalificacionEstudianteCursos.ObtenerCalificacionEstudianteCursos();
                transaccion.Complete();
            }

            return resultado;
        }

        public CalificacionEstudianteCurso ObtenerCalificacionEstudianteCursoPorId(int id)
        {
            CalificacionEstudianteCurso resultado = null;
            var trxOptions = new TransactionOptions();
            trxOptions.IsolationLevel = IsolationLevel.ReadUncommitted;
            trxOptions.Timeout = TimeSpan.FromMinutes(2);
            using (var transaccion = new TransactionScope(TransactionScopeOption.RequiresNew, trxOptions))
            {
                resultado = _servicioDeAdministracionDeCalificacionEstudianteCursos.ObtenerCalificacionEstudianteCursoPorId(id);
                transaccion.Complete();
            }

            return resultado;
        }

        public IEnumerable<CalificacionEstudianteCurso> ObtenerCalificacionEstudianteCursosPaginado(int pagina, int tamanio)
        {
            return _servicioDeAdministracionDeCalificacionEstudianteCursos.ObtenerCalificacionEstudianteCursosPaginado(pagina, tamanio);
        }

        public void AgregarCalificacionEstudianteCurso(CalificacionEstudianteCurso calificacionEstudianteCurso)
        {
            _servicioDeAdministracionDeCalificacionEstudianteCursos.AgregarCalificacionEstudianteCurso(calificacionEstudianteCurso);
        }

        public void ModificarCalificacionEstudianteCurso(CalificacionEstudianteCurso calificacionEstudianteCurso)
        {
            _servicioDeAdministracionDeCalificacionEstudianteCursos.ModificarCalificacionEstudianteCurso(calificacionEstudianteCurso);
        }

        public void EliminarCalificacionEstudianteCurso(CalificacionEstudianteCurso calificacionEstudianteCurso)
        {
            _servicioDeAdministracionDeCalificacionEstudianteCursos.EliminarCalificacionEstudianteCurso(calificacionEstudianteCurso);
        }

        
    }
}
